import sys
import math
import numpy
from .geoProfileGpro import PreProfile1D
from .getUniformProfileFuncGpro import distance, find_node_by_id, connected_nodes_sequence, processing_borings_by_topAndBottomLine, reflesh_borings_by_new_uniformNum

from typing import Any, Optional, List, Dict, Tuple, Set, Union

def distance_numba(x1, y1, x2, y2):
    """
    使用numba优化的距离计算函数
    :param x1, y1: 第一个点的坐标
    :param x2, y2: 第二个点的坐标
    :return: 两点间的距离
    """
    ...
def find_node_index_by_id_numba(node_id, node_ids):
    """
    使用numba优化的节点查找函数
    :param node_id: 要查找的节点ID
    :param node_ids: 节点ID数组
    :return: 节点在数组中的索引，如果未找到返回-1
    """
    ...
def connected_nodes_sequence_numba(start_node_idx, node_coords):
    """
    使用numba优化的连接序列计算函数
    :param start_node_idx: 起始节点索引
    :param node_coords: 节点坐标数组 [(x1,y1), (x2,y2), ...]
    :return: 连接顺序对的索引列表
    """
    ...
def cal_gap_numba(depth1_top, depth1_bottom, depth2_top, depth2_bottom, gap_type):
    """
    使用numba优化的高差计算函数
    :param depth1_top, depth1_bottom: 第一个地层的顶底深度
    :param depth2_top, depth2_bottom: 第二个地层的顶底深度
    :param gap_type: 0表示计算底部高差，1表示计算顶部高差
    :return: 高差值
    """
    ...
def find_best_split_line_numba(layers1_data, layers2_data):
    """
    使用numba优化的最佳分割线查找函数
    :param layers1_data: 第一个钻孔的地层数据数组 [[layer_code, depth_top, depth_bottom, thickness], ...]
    :param layers2_data: 第二个钻孔的地层数据数组
    :return: (split_type, layer1_idx, layer2_idx, gap) 其中split_type: 0=底线分割, 1=顶线分割
    """
    ...
def get_uniform_profile1DSet_optimized(start_boring, boring_set, profile2d = False):
    """
    使用numba优化的统一化层序函数
    :param start_boring: 起始钻孔
    :param boring_set: 所有待处理钻孔列表
    :param profile2d: 是否为二维剖面处理
    :return: 已经统一化层序的钻孔列表
    """
    ...
def processing_borings_by_topAndBottomLine_optimized(b1: PreProfile1D, b2: PreProfile1D):
    """
    优化版本的钻孔处理函数
    这里我们主要优化了分割线查找的部分
    """
    ...
def processing_borings_partup_by_topAndBottomLine_optimized(b1, b2):
    """优化版本的上部钻孔处理函数"""
    ...
def processing_borings_partdown_by_topAndBottomLine_optimized(b1, b2):
    """优化版本的下部钻孔处理函数"""
    ...
def find_node_by_id(id, node_set):
    """查找节点的辅助函数"""
    ...
def reflesh_borings_by_new_uniformNum(boring_set, new_boring):
    """刷新钻孔统一编号的辅助函数"""
    ...

class DevNull:
    def write(self, x):
        ...
    def flush(self):
        ...
